

package modele;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import modele.exceptions.FormationInexistanteException;
import modele.exceptions.PersonneInexistanteException;
import modele.exceptions.UtilisateurInexistantException;


public class Utilisateur
{
    private String login;
    private String password;
    private Personne personne;

    public Utilisateur(String login, String password, Personne personne)
    {
        this.login = login;
        this.password = password;
        this.personne = personne;
    }

    public Personne getPersonne()
    {
        return personne;
    }

    public static Utilisateur getUtilisateur(String login, String password) throws UtilisateurInexistantException, PersonneInexistanteException, FormationInexistanteException, SQLException
    {
        Utilisateur resultat = null;

        String requete = "Select t.type, u.identifiant from utilisateur u, type_utilisateur t where login = ? and password = ? and u.type_utilisateur = t.id_type;";
        Connection c = ConnexionBD.getConnection();
        PreparedStatement ps = c.prepareStatement(requete);
        ps.setString(1, login);
        ps.setString(2, password);
        ResultSet rs = ps.executeQuery();

        if (rs.next())
        {
            //L'utilisateur existe
            String type_user = (String) rs.getObject(1);
            int identifiant = (Integer) rs.getObject(2);
            Personne identifie = null;
            
            if(type_user.equals("MembreAdministration"))
                identifie = MembreAdministration.getAdmin(identifiant);
                
            if(type_user.equals("Intervenant"))
                identifie = Intervenant.getIntervenant(identifiant);
            
            if(type_user.equals("MaitreDeStage"))
                identifie = MaitreDeStage.getMaitreDeStage(identifiant);
            
            if(type_user.equals("Etudiant"))
                identifie = Etudiant.getEtudiant(identifiant);
            
            resultat = new Utilisateur(login, password, identifie);
        }
        else
        {
            //L'utilisateur n'existe pas
            throw new UtilisateurInexistantException();
        }

        c.close();

        return resultat;

    }
}
